package scantask.server.dataLayer;

import java.util.HashMap;
import java.util.Set;
import java.util.Vector;

import scantask.server.dataLayer.exceptions.AddAreaException;
import scantask.server.dataLayer.exceptions.AddBenchmarkException;
import scantask.server.dataLayer.exceptions.AddMeteorologyException;
import scantask.server.dataLayer.exceptions.AddMoistureException;
import scantask.server.dataLayer.exceptions.AddPestException;
import scantask.server.dataLayer.exceptions.AddSyntheticObjectException;
import scantask.server.dataLayer.exceptions.AddTemperatureException;
import scantask.server.dataLayer.exceptions.AddUserException;
import scantask.server.dataLayer.exceptions.GetAreaException;
import scantask.server.dataLayer.exceptions.GetBenchmarksException;
import scantask.server.dataLayer.exceptions.GetDefaultLocationException;
import scantask.server.dataLayer.exceptions.GetMoistureException;
import scantask.server.dataLayer.exceptions.GetPasswordException;
import scantask.server.dataLayer.exceptions.GetPestException;
import scantask.server.dataLayer.exceptions.GetSyntheticObjectsException;
import scantask.server.dataLayer.exceptions.GetTemperatureException;
import scantask.server.dataLayer.exceptions.GetUserException;

import scantask.containers.Area;
import scantask.containers.Benchmark;
import scantask.containers.Coordinate;
import scantask.containers.Moisture;
import scantask.containers.Pest;
import scantask.containers.SyntheticObject;
import scantask.containers.Temperature;
import scantask.containers.User;
import scantask.containers.WeekDate;

public interface DataManipulatorInterface {
	
	
	
	/** getters  
	 * @throws GetPasswordException **/
	
	public String getPassword(String userName) throws GetPasswordException;
	
	public User getUser(String userName) throws GetUserException;
	
	public Set<WeekDate> getValidDates(String userName);
	
	public Vector<Benchmark> getBenchmarks(String userName) throws GetBenchmarksException;
	
	public Coordinate getDefaultLocation(String userName) throws GetDefaultLocationException;
	
	public Vector<SyntheticObject> getSynthetices(String userName) throws GetSyntheticObjectsException;
	
	public HashMap<String,Vector<Temperature>> getTemperature(String userName, WeekDate date) throws GetTemperatureException;
	
	public HashMap<String,Vector<Moisture>> getMoisture(String userName, WeekDate date) throws GetMoistureException;
	
//	public Vector<Crop> getCrop(String userName, WeekDate date) throws GetCropException;
	
	public Vector<Pest> getPest(String userName, WeekDate date) throws GetPestException;
	
	public Vector<Area> getArea(String userName) throws GetAreaException;
	
	
	/** setters  **/
	
	public void addBenchmark(String userName, Benchmark benchmark) throws AddBenchmarkException;

	
	
	
	/** Administrator **/
	
	public void addUser(User user) throws AddUserException;
	
	public void addSyntheticObject(String userName, SyntheticObject synthetic) throws AddSyntheticObjectException;
	
	public void addTemperature(String userName, Temperature temp) throws AddTemperatureException;
	
	public void addMoisture(String userName, Moisture moisture) throws AddMoistureException;
	
//	public void addCrop(String userName, Crop crop) throws AddCropException;
	
	public void addPest(String userName, Pest pest) throws AddPestException;
	
	public void addArea(String userName, Area area) throws AddAreaException;
	
	public void addMeteorologyStation(String name, double x, double y) throws AddMeteorologyException;
	
	public void clearDataBase();
	
}
